package com.apache.log.es;

import com.apache.database.model.Page;
import io.searchbox.client.JestClient;
import org.elasticsearch.search.sort.SortBuilder;

import java.util.List;
import java.util.Map;

/**
 * @description: ES统一操作DAO接口
 * @author: Hou Dayu
 * @date: Created in 2020/11/17
 */
public interface ESBaseDao {

    JestClient getJestClient();

    /**
     * 创建索引
     * @param indexName 索引名称
     * @return
     */
    boolean createIndex(String indexName, String type, Map<String,String> settings, String mapping);

    /**
     * 验证索引是否存在
     * @param indexName 索引名称
     * @return
     */
    boolean indexExists(String indexName);

    /**
     * 增加文档内容
     */
    boolean createIndexInfo(String indexName, String type, String docId, Map<String,Object> json);

    /**
     * 批量增加文档内容
     */
    boolean createIndexBatch(String indexName, String type, List<Map<String,Object>> jsons);

    /**
     * 修改文档内容
     */
    boolean updateIndexInfo(String indexName, String type, String docId, Map<String,Object> json);

    /**
     * 删除指定文档信息
     */
    boolean delIndexInfo(String indexName, String docId);

    /**
     *  分页查询方法
     * @param indexName 索引名
     * @param indexType 索引type
     * @param pageIndex 当前页码
     * @param pageSize  每页条数
     * @param query    查询条件
     * @param sortBuilder 排序条件
     */
   Page pageList(String indexName, String indexType, int pageIndex, int pageSize, String query, SortBuilder sortBuilder);

    Map<String,Object> pageList(String indexName, String infoType,String queryStr);

    /**
     * 按ID查询
     * @param indexName 索引名
     * @param id
     */
    Map selectById(String indexName, String id);

    /**
     * 按条件查询（统计用）
     */
    Object searchByQuery(String indexName,String infoType, String query);
}
